#!/bin/bash
set -e

sudo timedatectl set-timezone Asia/Shanghai
sudo timedatectl set-ntp no

# 检查 MySQL 是否已安装
if ! dpkg -s mariadb-server &> /dev/null; then
    echo "MySQL is not installed. Installing..."
    # 安装 MySQL
    sudo apt-get update
    sudo apt-get install -y mariadb-server
    sudo  apt-get install  libqt5sql5-mysql

    # 配置 MySQL

    # 设置用户名和密码
    MYSQL_USER="pi"
    MYSQL_PASSWORD="raspberry"

    # 创建用户和数据库，并设置字符集为 UTF-8
    mysql -e "CREATE USER '$MYSQL_USER'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';"
    mysql -e "CREATE DATABASE pi CHARACTER SET utf8 COLLATE utf8_general_ci;"
    mysql -e "GRANT ALL PRIVILEGES ON pi.* TO '$MYSQL_USER'@'%';"
    mysql -e "FLUSH PRIVILEGES;"
    # 修改 MySQL 配置文件以允许外网访问和启用持久化
    echo "innodb_flush_method=O_DIRECT" | sudo tee -a /etc/mysql/mariadb.conf.d/50-server.cnf
    # sed -i -e "s/bind-address/#bind-address/" -e "s/#innodb_flush_log_at_trx_commit = 1/innodb_flush_log_at_trx_commit = 1/" -e "s/#sync_binlog = 1/sync_binlog = 1/" /etc/mysql/mariadb.conf.d/50-server.cnf

    # 修改 MySQL 配置文件以允许外网访问
    sed -i -e "s/bind-address/#bind-address/" /etc/mysql/mariadb.conf.d/50-server.cnf

    # 重启 MySQL 以使更改生效
    service mysql restart
else
    echo "mysql is already installed."
fi


if pgrep -x "lora_pkt_fwd" >/dev/null; then
    echo "lora_pkt_fwd is already running."
else
    config_file="localhost_conf.json.sx1250.CN470"
    if [ -e "$config_file" ]; then
        sudo chmod +x reset_lgw.sh 
        sudo chmod +x lora_pkt_fwd 
        ./lora_pkt_fwd -c "$config_file" > /dev/null 2>&1 &
    else
        echo "Configuration file '$config_file' does not exist."
    fi
fi


# 检查 /etc/collectionDevConf.ini 是否存在
if [ ! -f /etc/collectionDevConf.ini ]; then
    # 如果不存在，复制 ./collectionDevConf.ini 到 /etc/
    cp -vf ./collectionDevConf.ini /etc/collectionDevConf.ini
    echo "配置文件已复制到 /etc/collectionDevConf.ini"
else
    echo "/etc/collectionDevConf.ini 已存在"
fi

# 设置两个文件的路径
sysfile="/opt/collectionDevRun.sh"
curfile="./collectionDevRun.sh"
# 检查文件是否存在
if [ ! -f "$sysfile" ]; then
  echo "系统文件 $sysfile 不存在。"
  exit 1
fi

if [ ! -f "$curfile" ]; then
  echo "当前文件 $curfile 不存在。"
  exit 1
fi
# 获取两个文件的修改日期
mod_date_sysfile=$(date -r "$sysfile" +%Y%m%d%H%M%S)
mod_date_curfile=$(date -r "$curfile" +%Y%m%d%H%M%S)

# 打印修改日期以进行调试
echo "sysfile修改日期: $mod_date_sysfile"
echo "curfile修改日期: $mod_date_curfile"

# 比较两个文件的修改日期
if [[ "$mod_date_sysfile" < "$mod_date_curfile" ]]; then
  echo "文件 $curfile 更新于 $sysfile 之后。"
  # 如果 curfile 更新于 sysfile 之后，可以选择将 curfile 替换为 sysfile
  cp -vf "$curfile" "$sysfile"  # 替换 sysfile 为 curfile 
  chmod +x $sysfile
else
  echo "两个文件的修改日期相同。"
fi


# 更新 ini配置文件
# 旧的 .ini 文件
OLD_FILE="/etc/collectionDevConf.ini"
# 新的 .ini 文件
NEW_FILE="./collectionDevConf.ini"
# 备份旧文件
cp "$OLD_FILE" "${OLD_FILE}.bak"

# 只在文件不以换行符结尾时添加换行符
if [ "$(tail -c 1 "$OLD_FILE")" != "" ]; then
    echo "" >> "$OLD_FILE"
fi

if [ "$(tail -c 1 "$NEW_FILE")" != "" ]; then
    echo "" >> "$NEW_FILE"
fi

# 添加新文件中有而旧文件中没有的键值对
while IFS= read -r line; do
    # 跳过空行和注释行
    if [[ -z "$line" || "$line" == \[* || "$line" == \;* ]]; then
        continue
    fi

    key=$(echo "$line" | cut -d '=' -f 1)
    if ! grep -q "^$key=" "$OLD_FILE"; then
        echo "$line" >> "$OLD_FILE"
    fi
done < "$NEW_FILE"

# 删除旧文件中有而新文件中没有的键值对
# 注意：这里需要将旧文件内容先读取到一个临时文件，因为我们在循环中修改了原文件
cp "$OLD_FILE" "temp_old.ini"

while IFS= read -r line; do
    # 跳过空行和注释行
    if [[ -z "$line" || "$line" == \[* || "$line" == \;* ]]; then
        continue
    fi

    key=$(echo "$line" | cut -d '=' -f 1)
    if ! grep -q "^$key=" "$NEW_FILE"; then
        sed -i "/^$key=/d" "$OLD_FILE"
    fi
done < "temp_old.ini"

# 删除临时文件
rm -f "temp_old.ini"

echo "Sync completed. Backup of original old file is saved as ${OLD_FILE}.bak"

